package com.sen.pro.switches.core.util;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;

import com.sen.pro.switches.core.cfg.ENV;
import com.sen.pro.switches.core.common.Constants;

/**
 * 站点文件操作工具类
 * 
 * @author tian qingsen
 */
public final class SiteFileUtil {
	
	/**
	 * 上传文件到站点
	 * @param from
	 * @param toFilePath
	 * @throws IOException
	 */
	public static void siteFileUpload(File from, String toFilePath) throws IOException {
		FileUtils.copyFile(from, new File(toFilePath));
	}

	/**
	 * 获取站点LOGO图片名称
	 * @param siteImgDir 站点保存图片目录的绝对路劲
	 * @return LOGO图片名称
	 */
	public static String getSiteLogoImgName(String siteImgDir) {
		File file = new File(siteImgDir);
		File[] imgs = file.listFiles(new FileFilter() {
			@Override
			public boolean accept(File file) {
				if (file.getName().indexOf(Constants.LOGO_IMG_NAME) >= 0) {
					return true;
				}
				return false;
			}
		});
		if (ArrayUtils.isEmpty(imgs) || imgs.length == 0) {
			return null;
		}
		return ENV.IMG_DIR + "/" + imgs[0].getName();
	}
	
	/**
	 * 获取宣传图片名称
	 * @param siteImgDir 站点保存图片目录的绝对路劲
	 * @param advsIdx 宣传图片索引
	 * @return 宣传图片名称
	 */
	public static String getSiteAdvsImgName(String siteImgDir, final String advsIdx) {
		File file = new File(siteImgDir);
		File[] imgs = file.listFiles(new FileFilter() {
			@Override
			public boolean accept(File file) {
				if (file.getName().indexOf(genAdvsImgName(advsIdx)) >= 0) {
					return true;
				}
				return false;
			}
		});
		
		if (ArrayUtils.isEmpty(imgs) || imgs.length == 0) {
			return null;
		}
		return ENV.IMG_DIR + "/" + imgs[0].getName();
	}
	
	/**
	 * 删除站点LOGO图片
	 * @param siteImgDir 站点保存图片目录的绝对路劲
	 * @return LOGO图片名称
	 */
	public static void delSiteLogoImg(String siteImgDir) {
		File file = new File(siteImgDir);
		File[] imgs = file.listFiles(new FileFilter() {
			@Override
			public boolean accept(File file) {
				if (file.getName().indexOf(Constants.LOGO_IMG_NAME) >= 0) {
					return true;
				}
				return false;
			}
		});

		if (ArrayUtils.isNotEmpty(imgs)) {
			for (File img : imgs) {
				img.delete();
			}
		}
	}
	
	/**
	 * 删除宣传图片图片
	 * @param siteImgDir 站点保存图片目录的绝对路劲
	 * @param advsIdx 宣传图片索引
	 * @return LOGO图片名称
	 */
	public static void delSiteAdvsImg(String siteImgDir, final String advsIdx) {
		File file = new File(siteImgDir);
		File[] imgs = file.listFiles(new FileFilter() {
			@Override
			public boolean accept(File file) {
				if (file.getName().indexOf(genAdvsImgName(advsIdx)) >= 0) {
					return true;
				}
				return false;
			}
		});

		if (ArrayUtils.isNotEmpty(imgs)) {
			for (File img : imgs) {
				img.delete();
			}
		}
	}
	
	/**
	 * 根据宣传图片Id，生成宣传图片名称，不含后缀
	 * @param advsIdx 图片索引
	 * @return
	 */
	public static String genAdvsImgName(String advsIdx) {
		return Constants.ADVS_IMG_NAME + "_" + advsIdx;
	}

	/**
	 * 获取站点头部宣传图片名称
	 * @param siteImgDir 站点保存图片目录的绝对路劲
	 * @return LOGO图片名称
	 */
	public static List<String> getSiteAdvsImgNames(String siteImgDir) {
		File file = new File(siteImgDir);
		File[] imgs = file.listFiles(new FileFilter() {
			@Override
			public boolean accept(File file) {
				if (file.getName().indexOf(Constants.ADVS_IMG_NAME) >= 0) {
					return true;
				}
				return false;
			}
		});
		
		if (ArrayUtils.isEmpty(imgs)) {
			return null;
		}

		List<String> advsList = null;
		int len = imgs.length;
		if (len > 0) {
			advsList = new ArrayList<String>();
			for (int i = 0; i < len; i++) {
				advsList.add(ENV.IMG_DIR + "/" + imgs[0].getName());
			}
		}
		return advsList;
	}
	
	/**
	 * 获取站点html文件内容
	 * @param htmlFile 站点html文件路径
	 * @return 返回文件内容，若不存在文件，则返回 ""
	 * @throws IOException
	 */
	public static String getSiteHtmlFileToStr(String htmlFile) throws IOException {
		File f = new File(htmlFile);
		if (f.isFile() && f.exists()) {
			return FileUtils.readFileToString(f, Constants.UTF_8);
		}
		return StringUtils.EMPTY;
	}
	
	/**
	 * 写内容到站点Html文件
	 * @param toFile 被操作的文件
	 * @param str 内容
	 * @throws IOException 
	 */
	public static void writeStrToSiteHtmlFile(String toFile, String str) throws IOException {
		FileUtils.writeStringToFile(new File(toFile), str, Constants.UTF_8);
	}
	
	/**
	 * 删除站点文件
	 * @param file 被删除的文件
	 */
	public static boolean deleteSiteFile(String file) {
		File f = new File(file);
		return f.exists() && f.isFile() && f.delete();
	}
}
